package epoch.game.core.distr;

import epoch.game.core.buffer.IBuffer;
import epoch.game.core.message.IMessage;
import epoch.game.core.server.ISession;

/**
 * 服务节点消息处理器
 * @author will
 * @date 2015年11月21日 下午2:24:01
 */
public interface INodeHandler {
	
	/**
	 * 根据消息id生成消息对象
	 * @param messageId
	 * @param buffer
	 * @return
	 */
	default IMessage newMessage(int messageId, IBuffer buffer) {return null;} 
	
	/**
	 * session建立
	 * @param session
	 */
	default void onNodeSessionCreated(ISession session) {}
	
	/**
	 * session打开
	 * @param session
	 */
	default void onNodeSessionOpened(ISession session) {}
	
	/**
	 * 处理消息
	 * @param message
	 * @param fromNodeType
	 */
	default void onNodeMessageReveived(IMessage message, NodeType fromNodeType) {}
	
	/**
	 * 闲置状态的处理
	 * @param session
	 * @param idleStatus
	 */
	default void onNodeSessionIdle(ISession session) {}
	
	/**
	 * 捕获到异常
	 * @param session
	 * @param throwable
	 */
	default void onNodeExceptionCaught(ISession session, Throwable throwable) {}
	
	/**
	 * 连接断开处理
	 * @param session
	 */
	default void onNodeSessionClosed(ISession session) {}
	
	/**
	 * 消息发送完毕
	 * @param session
	 * @param message
	 */
	default void onNodeMessageSent(ISession session, Object message) {}
}
